#ifndef UNIQUE_RANDOM_BRANCHING_H
#define UNIQUE_RANDOM_BRANCHING_H

#include <gecode/int/branch.hh>

using namespace Gecode;
using namespace Gecode::Int;

/*!
 * Branchement aléatoire pour Gecode
 */
class UniqueRandomBranching: public Branching {

  public:
    UniqueRandomBranching(Space *, ViewArray<IntView> &);

    static void post(Space *home, IntVarArgs x);

  private:
    ViewArray<IntView> x;

    UniqueRandomBranching(Space *, bool, UniqueRandomBranching &);

    virtual Actor * copy(Space *, bool);
    virtual bool status(const Space *) const;
    virtual const BranchingDesc * description(const Space *) const;
    virtual ExecStatus commit(Space *, const BranchingDesc *, unsigned int);
};

#endif
